package com.lxb.blog.web.admin;

import com.lxb.blog.entity.Type;
import com.lxb.blog.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.validation.Valid;

@Controller
@RequestMapping("/admin")
public class TypesController {

    @Autowired
    private TypeService typeService;

    @GetMapping("/types")
    public  String types(@PageableDefault(size = 5,sort = {"id"},direction = Sort.Direction.DESC)
                                      Pageable pageable,
                         Model model){
        model.addAttribute("page",typeService.listType(pageable));
        return "admin/types";
    }

    @GetMapping("/types/input")
    public String input(Model model){
        model.addAttribute("type",new Type());
        return "admin/types-input";
    }

    /**
     * 新增types
     * @return
     */
    @PostMapping("/types")
    public String post(@Valid Type type, BindingResult result, RedirectAttributes attributes){
        //检验前端传的type
        if(result.hasErrors()){
            attributes.addFlashAttribute("message","输入异常");
            return "redirect:/admin/types";
        }
        Type type1 = typeService.getTypeByname(type.getName());
        if(type1 != null){
            attributes.addFlashAttribute("message","不能重复添加分类");
            return "redirect:/admin/types";
        }
        Type t = typeService.saveType(type);
        if(t == null){
            attributes.addFlashAttribute("message","新增失败");
        }
        else{
            attributes.addFlashAttribute("message","新增成功");
        }
        return "redirect:/admin/types";
    }


    /**
     * 删除
     * @param id
     * @return
     */
    @GetMapping("/type/{id}/delete")
    public String delete(@PathVariable Integer id,RedirectAttributes attributes){
        try{
            typeService.deleteType(id);
        }catch (Exception e){
            attributes.addFlashAttribute("message","博客中存在该分类，删除失败！");
            return  "redirect:/admin/types";
        }
        attributes.addFlashAttribute("message","删除成功");
        return  "redirect:/admin/types";
    }

    /**
     * 更新页面
     * @param id
     * @return
     */
    @GetMapping("/type/{id}/input")
    public String updateInput(@PathVariable Integer id,Model model){
        model.addAttribute("type",typeService.getType(id));
        return  "admin/types-input";
    }

    /**
     * 更新
     * @param type
     * @param id
     * @return
     */
    @PostMapping("/type/{id}/update")
    public String update(Type type,@PathVariable Integer id,RedirectAttributes attributes){

        if(id == null || type == null){
            attributes.addFlashAttribute("message","请联系开发人员");
            return "redirect:/admin/types";
        }

        Type type1 = typeService.getTypeByname(type.getName());
        if(type1 != null){
            attributes.addFlashAttribute("message","不能重复添加分类");
            return "redirect:/admin/types";
        }

        Type t = typeService.updateType(id,type);
        if(t == null){
            attributes.addFlashAttribute("message","更新失败");
            return "redirect:/admin/types";
        }
        attributes.addFlashAttribute("message","更新成功");
        return "redirect:/admin/types";
    }
}
